package lz77;

import lz77.util.*;
/**
 * Luokka joka sisältää pakatun datan
 * @author ossi
 *
 */
public class CompressedData {
	private LinkedListNode head, tail;
	private char bufferSize;
	
	/**
	 * Konstruktori
	 * @param size Pakkaamisessa käytetyn puskurin koko
	 */
	public CompressedData(char size){
		bufferSize = size;
	}
	/**
	 * Palauttaa pakkaamisessa käytetyn puskurin koon
	 * @return
	 */
	public char getSize(){
		return bufferSize;
	}
	/**
	 * Lisää solmun listaan
	 * @param node Lisättävä solmu
	 */
	private void add(LinkedListNode node) {
		if (head == null) {
			head = node;
			tail = node;
			return;
		}
		tail.setNext(node);
		tail = node;
	}
	/**
	 * Lisää char -arvon listaan
	 * @param i Lisättävä arvo
	 */
	public void add(char i) {
		CharLinkedList node = new CharLinkedList(i);
		add(node);
	}
	/**
	 * Lisää byte -arvon listaan
	 * @param b Lisättävä arvo
	 */
	public void add(byte b) {
		ByteLinkedList node = new ByteLinkedList(b);
		add(node);
	}
	
	/**
	 * Palauttaa listan pään iterointia varten
	 * @return Listan pää
	 */
	public LinkedListNode head() {
		return head;
	}

	public String toString() {
		StringBuffer tmp = new StringBuffer();
		tmp.append('[');
		LinkedListNode next = head;
		while (next != null) {
			tmp.append(next);
			tmp.append(',');
			tmp.append(' ');
			next = next.next();
		}
		tmp.append(']');
		return tmp.toString();
	}
}
